package com.chub.study.modules.service;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.chub.RespResult;
import com.chub.study.util.SpringContextUtils;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

/**
 * @author : chub
 * @version : V1.0.0
 * @fileName : FileParser.java
 * @description : TODO
 * @createTime : 2024-08-01 16:20
 */
@Log4j2
@Component
public abstract class FileParser {

    @Autowired
    private static ApplicationContext applicationContext;


    /**
     * @description : 获取继承类定义的字段名称
     *
     * @param  :
     * @return : String
     */
    public abstract String getCloumnName();

    /**
     * @description : 字段分隔符
     *
     * @param  :
     * @return : String
     */
    public String getCloumnSpearate(){
        return "|"; // "\u0003";
    }

    /**
     * @description : 数据文件处理接口，由子类实现
     *
     * @param  : reqJson
     * @return : RespResult<String>
     * @author : chub
     * @date   : 2024-08-01 20:22
     */
    public abstract RespResult<String> handle(JSONObject reqJson);

    public static RespResult<String> parse(JSONObject reqJson) {


        String beanName = reqJson.getString("beanName");

        log.info("开始执行解析任务：{}", reqJson.toJSONString());

        FileParser fileParser = null;

        // fileParser = ApplicationContext.getBean(reqJson.getString("fileParser"), FileParser.class);


        try {
            fileParser = SpringContextUtils.getBean(beanName);
            // fileParser =  applicationContext.getBean("fileParserDict", FileParserDict.class);
        } catch (Exception e) {
            log.info("执行的解析Bean未找到：{}", "fileParserDict");
            return RespResult.error(StrUtil.format("执行的解析Bean未找到：{}", beanName));
        }
        if (fileParser.getCloumnName() == null){
            log.info("该解析类未配置字段列表：{}", "fileParserDict");
            return RespResult.error(StrUtil.format("该解析类未配置字段列表：{}", beanName));
        }

        String[] colNames = fileParser.getCloumnName().split(",");

        // log.info("字段列表1：{}", StrUtil.join(", ", colNames));
        log.info("字段列表2：{}", String.join(", ", colNames));


        return fileParser.handle(reqJson);

        // String[] colValue = reqJson.getString("fileContent").split(fileParser.getCloumnSpearate());
        //
        // if (colName.length != colValue.length){
        //     log.info("字段数量不匹配：{}", "fileParserDict");
        //     return RespResult.fail(String.format("字段数量不匹配：{}", "fileParserDict"));
        // }
        //
        // JSONObject data = new JSONObject();
        // for (int i = 0; i < colName.length; i++) {
        //     data.put(colName[i], colValue[i]);
        // }
        //
        // RespResult<String> result = fileParser.handle(data);
        // if (result.getCode() != 200) {
        //     log.error("解析任务失败：{}", result.getMsg());
        //     return result;
        // }

        // try {
        //     fileParser = (FileParser) Class.forName(reqJson.getString("fileParser")).newInstance();
        // } catch (Exception e) {
        //     log.error("解析任务失败：{}", e.getMessage());
        //     return RespResult.error("解析任务失败");
        // }
        //
        // RespResult<String> result = fileParser.handle(reqJson);
        // if (result.getCode() != 200) {
        //     log.error("解析任务失败：{}", result.getMsg());
        //     return result;
        // }

        // return RespResult.success("success");
    };
}
